﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Maestro_Proveedores.Forms
{
    public partial class Modificaciones : Form
    {
        _Maestro_Proveedores_CORPORATIVADataSet.PRV_PROVEEDORRow prv_PROVEEDORRow = null;
        bool agregar = false, eliminar = false;


        public Modificaciones()
        {
            InitializeComponent();
            Session.SEG_USUARIOSTableAdapter.Fill(this.aUDITORIADataSet.SEG_USUARIOS);
        }

        private void EncontrarProveedorPictureBox_Click(object sender, EventArgs e)
        {
            //--- el formulario debe estar guardado en la clase redirect, por que es muy pesado y demora mucho al abrirlo.
            try
            {
                herramientas.Redirect.getFormulario("BuscarProveedor").ShowDialog();
                //-- una vez se cierre el asistente utilizo el ID que supuestamente se selecciono de este formulario y lo guardo en el campo de busqueda.
                this.NIT_buscar_textBox.Text = ((Forms.BuscarProveedor)herramientas.Redirect.getFormulario("BuscarProveedor")).IdEncontrado;
                //-- si el valor no es vacio, tonces realizo la busqueda.
                if (!this.NIT_buscar_textBox.Text.Equals(string.Empty))
                {
                    this.buscar_Click(null, null);
                }
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void buscar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.buscar_Click(null, null);
            }
        }

        private void buscar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            if (this.NIT_buscar_textBox.Text == "")
            {
                return;
            }

            if (this.pRV_proveedorTableAdapter.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.NIT_buscar_textBox.Text) == 0)
            {
                this.pRV_proveedorTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.NIT_buscar_textBox.Text);
            }

            if (this.cORPORATIVADataSet.PRV_PROVEEDOR.Count > 0)
            {
                prv_PROVEEDORRow = this.cORPORATIVADataSet.PRV_PROVEEDOR[0];
                this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC.Rows.Clear(); //--- AWIL 1130603
                try
                {
                    this.pRV_MODIFICACIONES_OCTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC, int.Parse(prv_PROVEEDORRow.id));
                    this.proveedor_textBox.Text = prv_PROVEEDORRow.razon_social;
                }
                catch (Exception){
                    this.proveedor_textBox.Text = prv_PROVEEDORRow.razon_social;
                }
                
            }
            else
            {
                MessageBox.Show("Este proveedor aun no ha sido registrado en el sistema.");
                this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC.Clear();
            }

            Cursor.Current = Cursors.Default;
        }

        private void Modificaciones_Load(object sender, EventArgs e)
        {
            //TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_MODIFICACIONES_OC' Puede moverla o quitarla según sea necesario.
            this.elaboradoPorTextBox.Text = Session.Seg_USUARRow.NOMBRE;
            this.elaboradoPorCargoTextBox.Text = Session.Seg_USUARRow.CARGO;
            this.elaboradoPorDireccionTextBox.Text = Session.Seg_USUARRow.DIRECCION;
            this.motivoComboBox.DataSource = Arreglos.motivoModificacion;
            this.causalComboBox.DataSource = Arreglos.causalModificacion;
            this.tipoOrdenCompraComboBox.DataSource = Arreglos.TipoOrdenCompra;
        }

        private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (agregar != true)
                {
                    if (this.proveedor_textBox.Text != string.Empty)
                    {
                        this.causalComboBox.Text=Arreglos.causalModificacion[0];
                        this.motivoComboBox.Text=Arreglos.motivoModificacion[0];
                        
                        DataRowView filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.AddNew();
                        _Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;

                        this.proveedor_textBox.Text = prv_PROVEEDORRow.razon_social;
                        //this.elaborado_porcomboBox.Text = Session.Seg_USUARRow.NOMBRE;
                        this.estadoTextBox.Text = "PENDIENTE";
                        prv_MODIFICACIONES_OCRow.idproveedor = prv_PROVEEDORRow.id;
                        prv_MODIFICACIONES_OCRow.idusuario = Session.Seg_USUARRow.ID_USUARIO;
                        prv_MODIFICACIONES_OCRow.fecha_solicitud = DateTime.Now.Date;
                        prv_MODIFICACIONES_OCRow.motivo = this.motivoComboBox.Text;
                        prv_MODIFICACIONES_OCRow.causal = this.causalComboBox.Text;
                        prv_MODIFICACIONES_OCRow.estado = this.estadoTextBox.Text;
                        this.pRVMODIFICACIONBindingSource.ResetBindings(false);
                        

                        agregar = true;
                        eliminar = false;
                    }
                    else
                        MessageBox.Show("Debe Seleccionar un Proveedor");
                }
                else
                {
                    MessageBox.Show("Ya tiene un registro nuevo para llenar");
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }

        //private void elaborado_porcomboBox_TextChanged(object sender, EventArgs e)
        //{
            
        //    if (this.elaborado_porcomboBox.Text != string.Empty)
        //    {
        //        DataRowView filaUSU = (DataRowView)this.sEG_uSUARIObindingSource.Current;
        //        Auditoria.CORPORATIVADataSet.SEG_USUARIOSRow seg_USUARIOSRow = (Auditoria.CORPORATIVADataSet.SEG_USUARIOSRow)filaUSU.Row;
        //        if (!seg_USUARIOSRow.IsCARGONull())
        //            this.elaborado_por_cargo_comboBox.Text = seg_USUARIOSRow.CARGO;
        //        if (!seg_USUARIOSRow.IsDIRECCIONNull())
        //            this.elaborado_por_direccion_comboBox.Text = seg_USUARIOSRow.DIRECCION;
        //    }
        //}


        private void pRV_mODIFICACIONEStoolStripButton_Click(object sender, EventArgs e)
        {
            if (this.pRVMODIFICACIONBindingSource.Current == null)
            {
                MessageBox.Show("Debe agregar un nuevo registro (Boton \"+\") antes de Guardar");
                return;
            }
            
            DataRowView filaMOD=null;
            _Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow prv_MODIFICACIONES_OCRow = null;

            filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.Current;
            prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;
            
            ///--- Validaciones AWIL
            if (prv_MODIFICACIONES_OCRow.estado == "AUTORIZADA")
            {
                MessageBox.Show("El registro actual ya fue AUTORIZADO. \nNO Puede ser modificado");
                return;
            }
            else if (prv_MODIFICACIONES_OCRow.estado == "RECHAZADA")
            {
                MessageBox.Show("El registro actual ya fue RECHAZADO. \nNO Puede ser modificado");
                return;
            }
            else if (this.motivoComboBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Indique el Motivo");
                this.motivoComboBox.Focus();
                return;
            }
            else if (this.causalComboBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Indique el Causal");
                this.causalComboBox.Focus();
                return;
            }
            if (this.codOrdenCompraTextBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Digite El Codigo de la OC");
                this.codOrdenCompraTextBox.Focus();
                return;
            }
            if (this.codOrdenCompraTextBox.Text.Trim().Length != 7 || this.codOrdenCompraTextBox.Text.Substring(0,1).ToUpper()!="P")
            {
                MessageBox.Show("El codigo de la OC No es valido. Verifique");
                this.codOrdenCompraTextBox.Focus();
                return;
            }
            else if (this.tipoOrdenCompraComboBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Indique el tipo de la Orden");
                this.tipoOrdenCompraComboBox.Focus();
                return;
            }
            else if (this.asuntoTextBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Digite el Asunto");
                this.descripcion_asuntoTextBox.Focus();
                return;
            }
            else if (this.descripcion_asuntoTextBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor Digite la Descripcion del Asunto");
                this.descripcion_asuntoTextBox.Focus();
                return;
            }
            ///--- FIN - Validaciones AWIL

            try
            {
                if (agregar == true && this.archivo_documentosTextBox.Text != string.Empty)
                {
                    //-- guardo el archivo de soporte
                    if (!this.guardarArchivoDocumento())
                        return;
                }

                //-- AWIL 1130528
                filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.Current;
                if (filaMOD != null)
                {
                    prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;
                    this.NIT_buscar_textBox.Focus();
                    prv_MODIFICACIONES_OCRow.asunto = this.asuntoTextBox.Text;
                    prv_MODIFICACIONES_OCRow.descripcion_asunto = this.descripcion_asuntoTextBox.Text;
                    prv_MODIFICACIONES_OCRow.motivo = this.motivoComboBox.Text;
                    prv_MODIFICACIONES_OCRow.causal = this.causalComboBox.Text;
                }
                //-- FIN AWIL 1130528

                //System.Data.DataRow[] AddedRows = this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC.Select(null, null, System.Data.DataViewRowState.Added);

                string archivo = string.Empty;
                System.Data.DataRow[] deletedRows = this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC.Select(null, null, System.Data.DataViewRowState.Deleted);
                if (deletedRows.Length > 0)
                {
                    foreach (DataRow fila in deletedRows)
                    {
                        archivo = fila["ruta", System.Data.DataRowVersion.Original].ToString();
                    }
                }
                else
                {
                    //Colocarles a todos PENDIENTE
                    filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.Current;
                    if (filaMOD != null)
                    {
                        prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;
                        prv_MODIFICACIONES_OCRow.estado = "PENDIENTE";
                        this.pRVMODIFICACIONBindingSource.ResetBindings(false);
                    }
                }

                this.Validate();
                this.pRVMODIFICACIONBindingSource.EndEdit();
                int valor = this.pRV_MODIFICACIONES_OCTableAdapter.Update(this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC);

                if (agregar == true && valor == 0 && this.archivo_documentosTextBox.Text.Trim() != "")
                    herramientas.File.deleteFile(ConfiguracionDelSistema.directorioModificacionOC + "\\" + this.archivo_documentosTextBox.Text);
                if (eliminar == true && this.archivo_documentosTextBox.Text.Trim() != "")
                    herramientas.File.deleteFile(ConfiguracionDelSistema.directorioModificacionOC + "\\" + archivo);

                agregar = false;
                eliminar = false;
                MessageBox.Show("Operación Realizada con exito!");
            }
            catch (Exception ex)
            {
                if (this.archivo_documentosTextBox.Text.Trim() != "")
                {
                    herramientas.File.deleteFile(ConfiguracionDelSistema.directorioModificacionOC + "\\" + this.archivo_documentosTextBox.Text);
                }
                else
                {
                    herramientas.MessageException.show(ex);
                }
            }
        }

        private void bindingNavigatorDeshacerItem_Click(object sender, EventArgs e)
        {
            this.pRVMODIFICACIONBindingSource.CancelEdit();
            this.cORPORATIVADataSet.PRV_PROVEEDOR.RejectChanges();
            agregar = false;
            eliminar = false;
        }

        private void bindingNavigatorReporteItem_Click(object sender, EventArgs e)
        {
            if (this.elaboradoPorTextBox.Text != string.Empty)
            {
                DataRowView filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.Current;
                if (filaMOD != null)
                {
                    _Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;
                    if (prv_MODIFICACIONES_OCRow != null)
                    {
                        if (prv_MODIFICACIONES_OCRow.Id > 0 && prv_MODIFICACIONES_OCRow.estado == "AUTORIZADA")
                        {
                            this.reP_MODIFICACION_OCTableAdapter.FillByIdModificaciones(this.cORPORATIVADataSet.REP_MODIFICACION_OC, prv_MODIFICACIONES_OCRow.Id);
                            FormReport_Modificaciones_OC fModif = new FormReport_Modificaciones_OC();
                            fModif.ModificacionOC_CrystalReport.SetDataSource((DataTable)this.cORPORATIVADataSet.REP_MODIFICACION_OC);
                            fModif.Show();
                        }
                        else
                            MessageBox.Show("No se genero ningun registro para ese proveedor guarde la Informacion Primero o No esta Autorizado");
                    }
                    else
                        MessageBox.Show("No se genero ningun registro para ese proveedor");
                }
            }
        }

        private void guardarDatosAdjuntosbutton_Click(object sender, EventArgs e)
        {
            if (this.proveedor_textBox.Text==string.Empty)
                return;

            //-- si el id es menor que cero (nuevo registro), entonces guardo la ruta del archivo en campo archivo_soporteTextBox
            if (this.NIT_buscar_textBox.Text != string.Empty)
            {
                this.Cursor = Cursors.WaitCursor;
                try
                {
                    OpenFileDialog saveFileDialog = new OpenFileDialog();
                    saveFileDialog.Multiselect = false;
                    saveFileDialog.RestoreDirectory = true;

                    if (saveFileDialog.ShowDialog() != DialogResult.OK)
                    {
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    this.archivo_documentosTextBox.Text = saveFileDialog.FileName;
                }
                catch (Exception ex)
                {
                    Maestro_Proveedores.herramientas.MessageException.show(ex);
                }
                this.Cursor = Cursors.Default;
            }
            //-- si el ID es positivo es por que se esta actualizando el registro, en este caso voy a actualizar el soporte
            else
            {
                string temp = string.Empty;
                temp = herramientas.File.newFile(ConfiguracionDelSistema.directorioModificacionOC);
                if (temp.Equals(string.Empty))
                {
                    //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                    return;
                }
                //--muevo al archivo anterior a la carpeta de archivos eliminados
                if (!herramientas.File.moveFileToReciclerDirectory(ConfiguracionDelSistema.directorioModificacionOC + this.archivo_documentosTextBox.Text))
                {
                    //  MessageBox.Show("Error moviendo el archivo a la carpeta de eliminados.");
                    return;
                }
                this.archivo_documentosTextBox.Text = temp;
            }
        }

        private bool guardarArchivoDocumento()
        {
            if (this.archivo_documentosTextBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe adjuntar un archivo de soporte a la modificacion.");
                return false;
            }
            //-- si el id es menor que cero (nuevo registro), guardo el archivo en el servidor
            if (this.NIT_buscar_textBox.Text != string.Empty)
            {
                string file = string.Empty;
                file = herramientas.File.newFile(this.archivo_documentosTextBox.Text, ConfiguracionDelSistema.directorioModificacionOC);
                if (file.Equals(string.Empty))
                {
                    //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                    return false;
                }
                this.archivo_documentosTextBox.Text = file;
            }
            return true;
        }

        private void pRV_MODIFICACIONDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            agregar = false;
            eliminar = false;
        }

        private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (eliminar == false)
                {
                    DataRowView filaMOD = null;
                    _Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow prv_MODIFICACIONES_OCRow = null;

                    filaMOD = (DataRowView)this.pRVMODIFICACIONBindingSource.Current;
                    prv_MODIFICACIONES_OCRow = (_Maestro_Proveedores_CORPORATIVADataSet.PRV_MODIFICACIONES_OCRow)filaMOD.Row;

                    ///--- Validaciones AWIL
                    if (prv_MODIFICACIONES_OCRow.estado == "AUTORIZADA")
                    {
                        MessageBox.Show("El registro actual ya fue AUTORIZADO. \nNO Puede ser Eliminado");
                        return;
                    }
                    else if (prv_MODIFICACIONES_OCRow.estado == "RECHAZADA")
                    {
                        MessageBox.Show("El registro actual ya fue RECHAZADO. \nNO Puede ser Eliminado");
                        return;
                    }

                    if (MessageBox.Show("El Registro sera Borrado Definitivamente. \n¿Desea Borrar el registro?", "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }

                    
                    this.pRVMODIFICACIONBindingSource.RemoveCurrent();
                    this.Validate();
                    this.pRVMODIFICACIONBindingSource.EndEdit();
                    this.pRV_MODIFICACIONES_OCTableAdapter.Update(this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC);
                    MessageBox.Show("Registro Eliminado con exito!");
                    agregar = false;
                    eliminar = true;
                }
                else
                {
                    MessageBox.Show("Ya posee un registro para eliminar, por tal motivo los registros volveran a su estado original");
                    this.cORPORATIVADataSet.PRV_MODIFICACIONES_OC.RejectChanges();
                    this.pRVMODIFICACIONBindingSource.CancelEdit();
                    eliminar = false;
                }
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void pRV_MODIFICACIONDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            if (this.estadoTextBox.Text != "PENDIENTE")
            {
                this.fechaDateTimePicker.Enabled = false;
                this.asuntoTextBox.ReadOnly = true;
                this.descripcion_asuntoTextBox.ReadOnly = true;
                this.guardarDatosAdjuntosbutton.Enabled = false;
                this.causalComboBox.Enabled = false;
                this.motivoComboBox.Enabled = false;
                this.codOrdenCompraTextBox.Enabled = false;
                this.tipoOrdenCompraComboBox.Enabled = false;
            }
            else
            {
                this.fechaDateTimePicker.Enabled = true;
                this.asuntoTextBox.ReadOnly = false;
                this.descripcion_asuntoTextBox.ReadOnly = false;
                this.guardarDatosAdjuntosbutton.Enabled = true;
                this.causalComboBox.Enabled = true;
                this.motivoComboBox.Enabled = true;
                this.codOrdenCompraTextBox.Enabled = true;
                this.tipoOrdenCompraComboBox.Enabled = true;
            }
        }

     

        
    }
}
